package org.zdc.pivot.wtk.listener;
import org.zdc.pivot.wtk.Component;
import org.zdc.pivot.wtk.Container;
import org.zdc.pivot.wtk.Cursor;
import org.zdc.pivot.wtk.IDragSource;
import org.zdc.pivot.wtk.IDropTarget;
import org.zdc.pivot.wtk.IMenuHandler;

interface IComponentListener 
{
	/**
	 * 当父容器改变执行（组件被添加或删除）
	 * @param	c
	 * @param	prevParent
	 */
	public function parentChanged(c:Component, prevParent:Container):Void;
	
	/**
	 * 组件尺寸更改时候执行
	 * @param	c
	 * @param	prevWidth
	 * @param	prevHeight
	 */
	public function sizeChanged(c:Component, prevWidth:Float, prevHeight:Float):Void;
	
	/**
	 * 当组件期望尺寸更改时执行
	 * @param	c
	 * @param	prevPrefWid
	 * @param	prevPrefHei
	 */
	public function preferredSizeChanged(c:Component, prevPrefWid:Float, prevPrefHei:Float):Void;
	
	/**
	 * 宽的极限更改时执行
	 * @param	c
	 * @param	prevMinWid
	 * @param	prevMaxWid
	 */
	public function widthLimitsChanged(c:Component, prevMinWid:Float, prevMaxWid:Float):Void;
	
	/**
	 * 高的极限更改时执行
	 * @param	c
	 * @param	prevMinHei
	 * @param	prevMaxHei
	 */
	public function heightLimitsChanged(c:Component, prevMinHei:Float, prevMaxHei:Float):Void;
	
	/**
	 * 当组件的位置更改时执行
	 * @param	c
	 * @param	prevX
	 * @param	prevY
	 */
	public function locationChanged(c:Component, prevX:Float, prevY:Float):Void;
	
	/**
	 * 当组建的可见度更改时执行
	 * @param	c
	 */
	public function visibleChanged(c:Component):Void;
	
	/**
	 * 当组件的光标更改时调用
	 * @param	c
	 */
	public function cursorChanged(c:Component, cursor:Cursor):Void;
	
	/**
	 * 当组件的提示文字改变时调用
	 * @param	c
	 * @param	prevText
	 */
	public function tooltipTextChanged(c:Component, prevText:String):Void;
	
	/**
	 * 当组件的提示延迟时间更改时时调用
	 * @param	c
	 * @param	prevDelay
	 */
	public function tooltipDelayChanged(c:Component, prevDelay:Int):Void;
	
	/**
	 * 当组件的拖拽源更改时执行
	 * @param	c
	 * @param	prevDragSource
	 */
	public function dragSourceChanged(c:Component, prevDragSource:IDragSource):Void;
	
	/**
	 * 当组件的释放源更改时执行
	 * @param	c
	 * @param	prevDropTarget
	 */
	public function dropTargetChanged(c:Component, prevDropTarget:IDropTarget):Void;
	
	/**
	 * 当组件的上下文处理器更改时执行
	 * @param	c
	 * @param	prevMenuHandler
	 */
	public function menuHandlerChanged(c:Component, prevMenuHandler:IMenuHandler):Void;
	
	/**
	 * 当组件的名字更改时执行
	 * @param	c
	 * @param	prevMenuHandler
	 */
	public function nameChanged(c:Component, previousName:String):Void;
}